import java.util.Scanner;

public class Test {
    public static int fun(int n){
        //求 N 的阶乘
        // 5! = 1*2*3*4*5
        int sum = 1;
        for(int i = 1; i <= n; i++){
            sum *= i;
        }
        return sum;
    }
    public static void sumFun(int n){
        //阶乘和
        int sum = 0;
        for(int i = 1; i <= n; i++){
            sum += fun(i);
        }
        System.out.println(n+"的阶乘和为："+sum);
    }
    public static void main(String[] args) {
        //求1！+2！+3！+4！+........+n!的和
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入n：");
        int n = scanner.nextInt();
        sumFun(n);
//        System.out.println(n+"!="+fun(n));
    }

    public static void main7(String[] args) {
        //输出一个整数的每一位，如：123的每一位是3，2，1
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输出一个整数：");
        int n = scanner.nextInt();
        while (n != 0){
            System.out.print(n % 10 + " ");
            n = n / 10;
        }
    }

    public static void main6(String[] args) {
        /*求出0～n之间的所有“水仙花数”并输出。(“水仙花数”是指一个三位数，其各位数字的立方和确好等于该数本身，
        如；153＝1^3＋5^3＋3^3，则153是一个“水仙花数“。）*/
        for(int i = 0; i <= 10000; i++){
            int count = 0;  //统计共有几位数 eg:153
            int tem = i;
            while (tem != 0){
                tem /= 10;
                count++;    //count=3
            }
            tem = i;
            int sum = 0;    //求和
            while (tem != 0){
                sum += Math.pow(tem % 10, count);
                tem /= 10;
            }
            if(sum == i){
                System.out.print(sum+" ");
            }
        }
    }

    public static void main5(String[] args) {
        //输出n*n的乘法口诀表，n由用户输入
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= i; j++){
                System.out.print(i+"*"+j+"="+i*j+" ");
            }
            System.out.println();
        }
    }

    /*KiKi学习了循环，BoBo老师给他出了一系列打印图案的练习，该任务是打印用“*”组成的X形图案。
    输入描述：
    多组输入，一个整数（2~20），表示输出的行数，也表示组成“X”的反斜线和正斜线的长度。
    输出描述：
    针对每行输入，输出用“*”组成的X形图案。*/
    public static void main4(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int n = in.nextInt();
            for(int i = 0; i < n; i++){
                for(int j = 0; j < n; j++){
                    if(i == j || i + j == n - 1){
                        System.out.print("*");
                    }else{
                        System.out.print(" ");
                    }
                }
                System.out.println();
            }
        }
    }

    public static void main3(String[] args) {
        //打印 1 - 100 之间所有的素数
        for(int i = 2; i <= 100; i++){
            int j = 2;
            for(; j <= Math.sqrt(i); j++){
                if(i % j == 0){
                    break;
                }
            }
            if(j > Math.sqrt(i)){
                System.out.print(i+" ");
            }
        }
    }

    public static void login(){
        //3次输入密码机会
        Scanner scanner = new Scanner(System.in);
        int count = 3;
        while (count != 0){
            System.out.println("请输入你的密码：");
            String pwd = scanner.nextLine();
            if(pwd.equals("123456")){
                System.out.println("登录成功");
                break;
            }else {
                count--;
                System.out.println("输错了，你还有"+count+"次机会");
            }
        }
    }
    public static void main2(String[] args) {
        login();
    }

    //方法重载
    public static void main1(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println(add(a, b));
        System.out.println(add(1, 2, 3));

        double x = 10.0;
        double y = 20.0;
        System.out.println(add(x , y));
    }
    public static int add(int a, int b){
        return a + b;
    }
    public static double add(double a, double b){
        return a + b;
    }
    public static int add(int a, int b, int c){
        return a + b + c;
    }
}
